	MaskInput = function (f, m) {
		function mask(e) {
			var patterns = {
				"1": /[A-Z]/i,
				"2": /[0-9]/,
				"4": /[\xC0-\xFF]/i,
				"8": /./
			},
				rules = {
					"a": 3,
					"A": 7,
					"9": 2,
					"C": 5,
					"c": 1,
					"*": 8
				};
	
			function accept(c, rule) {
				for (var i = 1, r = rules[rule] || 0; i <= r; i <<= 1)
				if (r & i && patterns[i].test(c)) break;
				return i <= r || c == rule;
			}
			var k, mC, r, c = String.fromCharCode(k = e.key),
				l = f.value.length;
			(!k || k == 8 ? 1 : (r = /^(.)\^(.*)$/.exec(m)) && (r[0] = r[2].indexOf(c) + 1) + 1 ? r[1] == "O" ? r[0] : r[1] == "E" ? !r[0] : accept(c, r[1]) || r[0] : (l = (f.value += m.substr(l, (r = /[A|9|C|\*]/i.exec(m.substr(l))) ? r.index : l)).length) < m.length && accept(c, m.charAt(l))) || e.preventDefault();
		}
		for (var i in !/^(.)\^(.*)$/.test(m) && (f.maxLength = m.length), {
			keypress: 0,
			keyup: 1
		})
		addEvent(f, i, mask);
	};
	
	addEvent = function (o, e, f, s) {
		var r = o[r = "_" + (e = "on" + e)] = o[r] || (o[e] ? [
			[o[e], o]
		] : []),
			a, c, d;
		r[r.length] = [f, s || o],
		o[e] = function (e) {
			try {
				(e = e || event).preventDefault || (e.preventDefault = function () {
					e.returnValue = false;
				});
				e.stopPropagation || (e.stopPropagation = function () {
					e.cancelBubble = true;
				});
				e.target || (e.target = e.srcElement || null);
				e.key = (e.which + 1 || e.keyCode + 1) - 1 || 0;
			} catch (f) {}
			for (d = 1, f = r.length; f; r[--f] && (a = r[f][0], o = r[f][1], a.call ? c = a.call(o, e) : (o._ = a, c = o._(e), o._ = null), d &= c !== false));
			return e = null,
			!! d;
		}
	};
	
	removeEvent = function (o, e, f, s) {
		for (var i = (e = o["_on" + e] || []).length; i;)
		if (e[--i] && e[i][0] == f && (s || o) == e[i][1]) return delete e[i];
		return false;
	};
	
	jQuery.fn.MaskInput = function(pMascara) {
		var _mascara = pMascara;
		return jQuery(this).each(function() {
			MaskInput( jQuery(this).get(0), _mascara );
		});
	}